\chapter{Functional Requirements}

At a very high level, CEAB++ will provide two primary functions: validating a
selected course-load against the CEAB's degree requirements and providing
students with a tentative schedule of a selected course-load, allowing potential
conflicts to be identified and resolved prior to pre-enrollment on Quest.

\section{Main functions}

\subsection{Validate course selections against CEAB requirements}
The application shall allow users, i.e. Systems Design Engineering students,
to compile a list of courses to be taken in each academic term. The resulting
course list will be validated to ensure that the user's course selections
satisfy the degree requirements set forth by the CEAB.

\subsection{Provide course scheduling \& conflict resolution}
In addition to validating one's course selections, the application shall also
provide users with the ability to explore potential class schedules and resolve
time-tabling conflicts, using class scheduling data obtained from the University of
Waterloo's Registrar's Office.

\section{Extensibility}
The application shall provide system administrators with the ability to modify:
\begin{inparaenum}
\item Electives being offered,
\item Scheduling data,
\item CEAB weightings, and;
\item CEAB degree requirements 
\end{inparaenum}
on a per-term basis, allowing administrators to easily update the application in
the event of curriculum or degree-requirement changes in the future.

\section{Persistence}
The application shall provide users with stateful, persistent storage of a
planner, allowing users to modify a planner, save the work in progress and
return to the application later to make further changes. As well, the user's
saved planners shall be backed up regularly to minimize data loss in the event
of hardware or software errors.

\section{Security}
To ensure a high degree of privacy for users, the application shall encrypt all
personally identifying information, such as student numbers, names and e-mail
addresses when persisting a student's planner. Personal data shall be encrypted
using an industry standard AES-128 cypher.

% \section{Statistics}
% The system shall provide users with statistics about courses selected by other
% students. The statistics provided shall include:
% \begin{inparaenum}
% \item The most popular courses taken in previous years
% \item The least popular courses taken in previous years
% \end{inparaenum}

\section{User interface}
The application's user interface shall be web-based, allowing any user will a
relatively ``modern'' Web Browser to use CEAB++ to schedule and validate their
course selections. Supported browsers are:
\begin{itemize}
    \item Mozilla Firefox 2 
    \item Apple Safari 3
    \item Microsoft Internet Explorer 7
\end{itemize}

The interface will incorporate design principles such as familiarity---designing
the interface to use elements with which users are already
accustomed~\cite{ref:sommerville}. An example of this is using tabular container
navigation.

Student users will require two interfaces---one to view plans, and one to search
courses.  The UI will consist of a simple design which provides ``minimal
surprise'' to the user by using consistent, familiar
elements~\cite{ref:sommerville}.

% \begin{figure}
% \centering
% \includegraphics[scale=0.4]{images/plan}
% \caption{User Interface for Viewing CEAB Plans}
% \label{fig:plan}
% \end{figure}

\section{Personnel}

\subsection{Expertise}

Based on the requirements, the following skill sets are required to produce the
product:

\begin{itemize}
    \item Database Management
    \item Client Side Web Development (HTML/CSS/Javascript)
    \item Server Side Web Development
    \item Server Management (for installation and performance reqs)
\end{itemize}

\subsection{Hours}

Estimating project hours is inherently difficult, but assuming each project team
member spends 3 hours/week for the rest of the term, that gives approximately 85
hours.
